package aupdg.data.model;

import aupdg.logic.analysis.SecurityLevel;

/**
 * Contract of a generic LDG node.
 *
 * @author AA and CJ
 */
public interface Node {

    /**
     * Returns the node's label.
     *
     * @return
     */
    public String getLabel();

    /**
     * Sets the node's label.
     *
     * @param label
     */
    public void setLabel(String label);

    /**
     * Returns true if the node was processed.
     *
     * @return
     */
    public boolean isProcessed();

    /**
     * Sets the boolean processed to the value provided in the argument.
     *
     * @param processed
     */
    public void setProcessed(boolean processed);

    /**
     * Returns the node's ID.
     *
     * @return
     */
    public int getId();

    /**
     * Returns a String representation of the node.
     *
     * @return
     */
    @Override
    public String toString();

    /**
     * Sets a consecutive id for this node when it is added to the LDG.
     *
     * @param id
     */
    public void setNodeIdInGraph(int id);

    /**
     * Returns the security level of the node.
     *
     * @param level
     */
    public SecurityLevel getLevel();

    /**
     * Sets the security level of the node.
     *
     * @param level
     */
    public void setSecurityLevel(SecurityLevel level);
}
